home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows Expert
/
Windows Expert.iso
/
windownt
/
cshx86.zip
/
README.TOO
< prev
next >
Wrap
Text File
|
1993-04-28
|
30KB
|
730 lines
Hamilton C shell(tm) for Windows NT(tm) Release Notes 2.1.d
Copyright (c) 1989-1993 by Hamilton Laboratories. All rights reserved.
Change Summary
The basic release history for the C shell has been:
Dec 1988 1.0 First release, running on OS/2 1.0.
Jan 1989 1.01 Cleanup and final release for OS/2 1.0.
Feb 1989 1.02 First release for OS/2 1.1 (Presentation Manager).
Mar 1989 1.03 Cleanup and base release for OS/2 1.1.
Aug 1989 1.04 Command line editing and filename and command
completion added.
Mar 1990 1.05 Support for OS/2 1.2, HPFS and long filenames added
along with many important utilities including grep,
diff, head, tail, sed, etc.
Feb 1991 1.06 Support for user-defined screen colors, inheritable
local variables, higher performance, etc.
Jul 1992 2.0 First release from a unified codebase supporting
OS/2 and Windows NT.
Apr 1993 2.1 Support for Berkeley mode scripts, better error
diagnostics, support for Windows NT March beta.
Along the way, Hamilton C shell has grown from about 35,000 lines of C
to over 95,000 lines. All of it has been created from scratch by
Hamilton Laboratories. Not one line was ported from or written on anything
but OS/2 or Windows NT.
This document will contain a detailed summary of all the changes made
along the way from one release to another, beginning with the initial 2.0
release for NT. Changes which only affect certain builds (e.g., OS/2) are
so indicated.
Changes are presented chronologically, so if you're updating from a previous
release, you'll want to jump in somewhere in the middle to start reading.
At the very end of this document is a short list of the known bugs and
limitations. You'll also find contact information in case you encounter a
problem or have a suggestion.
Fix Level 2.0 Changes:
1. Initial product release for Windows NT.
Fix Level 2.0.a Changes:
2. [OS/2] The 2.0 version of ls wasn't adding up allocated sizes of
directories properly when using the -Lw options.
Fix Level 2.0.b Changes:
3. [OS/2] The OS/2 shell can now be run when escaping to the command line from
the OS/2 1.x and 2.0 installation disks.
4. [NT] Final cleanup on the C shell codebase to make it portable to the
MIPS RISC processor under NT.
5. [NT] Trying to run a .bat or .cmd file started cmd.exe, but didn't actually
run the script. It does now.
6. [NT/x86] A codegen error in the compiler caused :s/.../.../ operations
to trash the heap, causing the C shell to crash randomly.
7. [NT] A minor bug in the common routines used to read number pad keystrokes
was fixed.
8. [NT] A number of bugs in tar.exe that caused it problems opening new tar
files and setting or reporting timestamps on files extracted from or listed
in a tar file were fixed.
9. [NT] More no longer fails with a complaint that it can't scroll or fill the
console if, e.g., you go to the end of a file, page down and then search
backward for text that's not found. The console api's were erroneously
reporting failures when in fact they worked fine.
Fix Level 2.0.c Changes:
10. [NT] The common screen painting library used by the shell and a number of
the utilities would sometimes set the cursor incorrectly if scrolling was
involved. It should now be correct.
11. [NT] cut.exe couldn't read files specified on the command line. It can
now.
12. The di (diff interative) alias for diff -b! (merged diff using color,
ignoring white space differences) has been added to startup.csh and the
definition for the mi (more interactive) alias has been fixed for NT.
13. [NT] ver.csh was added to the bin directory.
14. [NT] The common keyboard routines now recognize ctrl-H as the same as a
backspace and ctrl-[ as an escape.
Fix Level 2.0.d Changes:
15. A long-standing bug in the shell's command line editing routines that
could cause the screen to be painted incorrectly has been corrected.
16. [NT] A bug in the common seek logic used in tar, tail, and xd caused them
to have problems reading files that came in over a pipe on stdin. That
problem has been fixed. binedit, more, sed and tee used the same logic
and were recompiled even though they were unaffected.
17. A long-standing, but usually benign bug in the more filter's ISAM
mechanism was fixed.
18. The shell no longer complains under NT nor fails under OS/2 if one tries
to edit a history reference (e.g., with !!:s/X/Y/) that's > 64K.
19. [OS/2] dskwrite now properly detects and autoformats any unformatted
disks it's given as disks 2 or following when using dskwrite -ac.
20. The sizeof sample script has been improved to run a bit faster and to
avoid problems running out of memory in the C shell if a big directory
is being measured.
Fix Level 2.0.e Changes:
21. [NT] The common keyboard routines have been fixed to silently gobble up
CapsLock keystrokes. They were being passed through to the application.
The shell, mv, cp, rm and more were affected.
22. [NT] The help screens for label, more and tar and for the internal
commands hashstat, kill and ps have been edited to replace references
to OS/2 with NT.
23. eval -h now indicates "success" as in its return value. (It no longer
causes a loop to exit.)
24. [NT] The C shell no longer litters the output generated by the setenv
command with current directory variables such as "=C:". Also, it now
correctly reads all current directories out of the environment at
startup.
25. [NT] The C shell now properly treats environmental variable names as
case-insensitive. (They're still case sensitive under OS/2.) The set,
unset and @ statements are case-sensitive (that's so you can still create
shell variables that differ from environmental variables only by case)
but the setenv and unsetenv statements and $var and other variable
references first try case-sensitive, then case-insensitive variable
lookups.
Fix Level 2.0.f Changes:
26. [NT] The NT version of the C shell can now determine, just as the OS/2
version can, whether a child will run in the same or a different window.
If it's a different window, the shell immediately prompts for a new
command.
27. [NT] hlabel.exe now includes a warning in the help screen that setting the
volume label is disabled under NT due to a kernel limitation. Also, it
properly gives an error message if you type "label a:foo".
Fix Level 2.0.g Changes:
28. [NT/x86] rm -x was broken in the 2.0.e build when we switched to the July
SDK compiler; the optimizer generated bad code that we didn't spot.
Rebuilding with optimization turned off with pragmas fixed the problem.
Fix Level 2.0.h Changes:
29. All the utilities have been cleaned up in preparation for the 32-bit
release for OS/2 2.0.
30. binedit, chmod, dim, fgrep and head no longer routinely translate
filenames to lower case, thus avoiding any problems with mixed-case
filesystems.
31. [OS/2] more no longer has problems forward or backward searching across
more than 32,000 lines.
32. When moreh [OS/2] or hmore [NT] recognizes that it's reading from a
file, meaning it can use seeks to re-read any data it discards, it
now buffers only a 100K window into the file. That reduces swapping
under OS/2 and dramatically improves heap performance under NT without
sacrificing functionality.
33. [NT] The C shell now correctly recognizes that it must wait for DOS apps
to complete before prompting for another command.
34. [NT] The C shell now responds to Close events from the pull-down on its
window.
Fix Level 2.0.i Changes:
35. [OS/2] markexe now understands how to mark 32-bit 2.0 applications.
36. The ts.csh script was broken when quoting rules inside a backquoted
string were changed at release 1.06 but went unnoticed until now.
The fix was to delete the now superfluous escaped single quotes.
37. If filename completion matched a file with a ! in the name, it wouldn't
always escape it. Sometimes it'd just single quote it, causing it to
be mistaken for a history reference.
38. des had a couple bugs. Under NT, it would often fail with a divide by
zero due to improper initialization. And under both NT and OS/2, it
didn't handle EOF if data was being read from stdin properly. Both
problems have been fixed.
Fix Level 2.0.j Changes:
39. [OS/2] Since there's no .. entry in the root of a FAT drive, cd .. there
wouldn't work. Instead, the C shell would try cd'ing to one of the CDPATH
directories. It now does the right thing.
Fix Level 2.0.k Changes:
40. [OS/2] The change to markexe at 2.0.i broke it, causing markexe to garble
the .exe header. It now works as it should.
Fix Level 2.0.L Changes:
41. [NT] Complete rebuild of everything for the October Beta version of NT.
42. [NT] Background children are now protected from ^C in a console window
using the new CREATE_NEW_PROCESS_GROUP option to the CreateProcess api.
Also, the kill command now uses, by default, the new GenerateConsole-
CtrlEvent api call to send a ^Break to a child. The advantage is that
if the child is willing to accept it, links to any DLL's are closed
properly.
43. [NT] Support for the new shutdown and logoff signal events has been
added, allowing copies of the C shell to automatically exit when
shutdown or logoff is selected from the Program Manager.
44. [NT] Support for the new LocalTime notion has been added to the date
and ls utilities.
45. Additional work has been done on all the utilities and the shell in
particular to prepare for a full 32-bit OS/2 2.0 release from one common
source base.
46. [NT] The -s option to fgrep and grep didn't work. It does now.
47. [OS/2] A number of bad semaphore races were inadvertently introduced
when support for NT was added at release 2.0. Apparently, they never
caused problems (none were ever reported) but, in any event, they are
fixed now.
Fix Level 2.0.m Changes:
48. [NT] The built-in sleep command no longer forgets to close its open
thread handle. Previously, after running sleep roughly 5000 times, it'd
fail, claiming it couldn't start a new thread.
49. [NT] The -i (interactive) option for mv, cp and rm now works.
50. [NT] Minor changes were made to the shell to prepare it for the DEC
Alpha version of NT.
51. [NT] Support for LocalTime has been added to the touch utility.
52. [NT] The NTVersion (NT Build number) and WinVersion built-in variables
have been added and used in the ver.csh script.
53. A new -u (unbuffered) option has been added to the C shell to allow
it to be used over a communications line.
54. First release of a demo version of the shell and all its utilities.
Fix Level 2.0.n Changes:
55. [NT] Split was broken. It works now.
Fix Level 2.0.o Changes:
56. [NT] If an ordinary foreground child process was started, wait would not
work; it'd think the child never completed. It works now.
57. [NT] ^C now properly kills nested C shell scripts. Previously, ^C only
worked if it happened to come in while the top-most level was running.
58. [NT] The shell could trap in certain situations, usually involving labels.
For example, the one-line script, "foo: echo hello", would trap. It
works now.
59. [NT] If the current directory on the current drive was changed in a
script or other thread, the shell wouldn't properly set it back for child
processes created from other threads. That's been fixed.
60. The w option to a search/replace operation in sed was broken. It's now
working.
61. [NT] The w command to sed didn't know how to open a file that didn't
already exist. It does now.
62. [NT/MIPS] The search/replace command to sed often failed due to datatype
misalignment in the compiled sed script. That's been fixed.
63. [NT] The shell now issues an error message if an attempt is made to pass
a command line longer than 32,282 characters (the limit for the NT
CreateProcess call) to a child.
64. The fullpath function now knows not to let .. segments back up over the
system or resource names in a UNC (network) name. Also, the driveno
function now reports an error if its argument has an invalid drive
specification or is a UNC name.
65. The shell now runs logout.csh scripts properly. A primordial bug caused
it to issue a prompt if it found a logout.csh script (it shouldn't have)
and run just the first statement.
66. [NT] Erroneous statements like "cat >" (i/o redirection with no filename
following) no longer cause the shell to crash. (Actually, this bug has
been in the OS/2 version all along also but just didn't happen to cause
problems.)
67. [NT] File sharing or other errors that prevented a file from being copied
are now reported by cp and mv. Previously, the copy would fail, but
there'd be no warning.
Fix Level 2.0.p Changes:
68. Rerunning a statement that set any of the colors variables to a literal
(e.g., "for i = 1 to 10 do setenv COLORS = black on white; end") used to
cause a trap. It works now.
69. Escape characters in a substitution containing command or variable
subsitutions that were edited to produce more than one word were not
correctly processed. E.g.,
echo "`echo a b`:s/a/A/^""
produced:
A b^"
It should have produced (as it does now):
A b"
70. A long-standing, but only recently reported bug that could cause traps
and assert failures doing a cd +c to a subdirectory on another drive
has been found and corrected.
71. unset'ing or unsetenv'ing a non-existent variable is no longer treated
as an error.
72. [NT/Alpha] First release with support for the DEC Alpha processor.
73. [OS/2 2.0] First build with complete, working, debugged support for
use of 32-bit code and the 32-bit API's under OS/2 2.0.
74. [NT] The SHELL variable, if wasn't already defined in the inherited
environment, would be set to the pathname of the C shell, but with the
last character dropped. This has been fixed.
75. ls.exe now accepts a -q (quiet) option, telling ls not to complain
about non-existent files. Also, it's more consistent when it does
complain. (Previously, it would not complain if it was asked to look
for an "impossible" name, e.g., a long filename on a FAT drive.) ls
also now looks for an LSOPTIONS environmental variable.
76. sed will now ignore Ctrl-Z characters between statements in a script.
This change lets it process scripts created with editors that insist
on pasting a Ctrl-Z (EOF) character onto the end of the files they
produce.
77. [NT] The help alias has been deleted from startup.csh. It really
applied only to OS/2.
78. [NT] The cl.csh (compile and link) and makecpgm.csh (make all the C
programs) scripts have been added to the samples directory along with
a sample skip file containing fragments of lines that should be skipped in
the compiler/linker output.
Fix Level 2.0.q Changes:
79. [NT & OS/2 2.0] A very minor performance improvement was made, eliminating
some unnecessary checks for stack overflow. (The check was superfluous
because under NT and 2.0, the system grows the stack automatically as
needed anyway.)
80. The popup that appears if an internal assertion fails in the C shell
now goes away, showing what was underneath it, when you press a keystroke.
Fix Level 2.0.r Changes:
81. Minor fixups were done to the C shell, patchlnk, dskread, dskwrite,
markexe and setrows to allow demo versions to be built for OS/2.
82. The cookie passed to demo versions of the utilities now expires
more slowly. Previously, the cookie expired too fast to allow the
utilities demos to be run reliably from a CD-ROM.
83. [NT] A typo in the kill -h help screen was corrected.
84. [NT/x86] A compiler optimization bug in rm, mv, and cp that affected
recursive operations against directories has been fixed by turning off
certain optimizations where the problem occurred.
85. [NT] pwd now exits with a correct return code of 0 if it's successful.
Also, it now reports an error if asked for the current directory on an
invalid drive.
Fix Level 2.0.s Changes:
86. [NT] ps was incorrectly reporting running threads as zombies and zombies
(threads that had ended but which hadn't been cleaned up yet) as running.
That's been fixed.
Fix Level 2.0.t Changes:
87. [NT] touch didn't properly recognize 4-digit year numbers. It does now.
88. [NT] ls and pwd didn't properly interpret the MIXEDCASEDRIVES variable
(off-by-one error). Also, the shell and pwd didn't show current
directories in the right case on mixed case drives.
89. [NT] The cl.csh script in samples directory didn't work properly with the
DEC Alpha compiler; it does now. Also, it's been enhanced to look for the
skip file in the same directory with the cl.csh script.
90. [NT] If a child of the C shell changed the console mode (e.g., disabling
processed input, thus turning off Ctrl-C processing) but didn't reset
things before exiting, it could affect the shell. That's been fixed; now
the C shell resets the console mode every time it prompts for a new
command from the keyboard.
Fix Level 2.0.u Changes:
91. [NT] The C shell now ensures that the drive letters passed to the NT
kernel for the current directories are always upper case. Lower case
drive letters have been found to be a problem when spawning POSIX
children.
Fix Level 2.0.v Changes:
92. The C shell now supports command and variable substitution in <<-style
inline i/o ("here" documents). Quoting (with single, double or back
quotes) or escaping any part of the word immediately following the <<
operator suppresses the substitutions.
93. Error reporting is now substantially improved. Messages will now show
the line number of the statement that failed, not where it was called
from even if it was inside a user-defined procedure. Also, by default,
the shell will print out a complete trace of the call stack showing
arguments passed to procedures, scripts, eval statements, etc., all the
way down the stack. (To suppress call stack dumps, invoke the C shell
with the new -t option.)
94. A new mode that provides more strict compatibility with the original
BSD C shell has been added. Triggered by trying to run a script that
starts with #!/bin/csh or if the shell is invoked with the new -B
option, the C shell will attempt to process statements in a more fully
Berkeley-compatible fashion. (Scripts that do not start with #!/bin/csh
will still be processed according to Hamilton C shell rules, even if
the -B option is used to request Berkeley compatibility interactively.)
In BSD compatibility mode:
a. The status variable will reflect the return code from the rightmost
stage of a pipeline. The tailstatus variable will be ignored.
b. All the shell variables will be snapshotted and all new variables
made local to the thread.
c. Berkeley-style $var[...] indexing notation will be used, where the
indexing is by word selection operators (like the :-editing operators)
rather than by expression.
d. All variable arrays (except argv) will start with element 1.
Accessing element 0 will give a null.
e. $0 or $argv[0] will be the scriptname. $argv will be the rest of the
argument vector. The bsdargv variable will be ignored.
f. The # character will not need to be followed by white space to be
considered the start of a comment.
g. The patterns in a case test (inside a switch) will be strings and need
not be quoted, rather than arbitrary expressions. Also, the switch
value is evaluated as a wordlist which may contain variable or command
substitutions and wildcards and then rendered as a string.
h. endif and endsw will be predefined aliases for end (but only when
closing an if or switch, respectively). breaksw will be a pre-defined
alias for break.
i. "set foo" and "setenv foo" will set foo to a null string, not dump
its value.
j. / and /= will perform integer division.
k. The right operand of the =~ and !~ pattern matching operators will be
taken as a word which may contain wildcards.
l. In an expression, a variable must be preceded by $. If it doesn't, it'll
be taken as a literal string.
The changes should allow most scripts to run without problems. However,
there will still be a few differences:
a. The escape character will still be controlled by the escapesym
variable (shared across all threads), which defaults to ^, not \.
b. Environmental variables will still be shared. Changing them in a
script will change them as seen by the parent.
c. The special meaning of several break statements on one line will
not be supported.
d. unset and unsetenv still do not accept patterns.
e. The following commands are not supported: bg, exec, fg, glob, jobs,
limit, nice (but eval gives similar functionality), nohup, notify,
stop, suspend, unlimit and %job.
f. History references inside alias definitions will still not be
supported.
g. The (...) construct will isolate only the current directory, not all
variables and other state information.
95. Running a statement in the background using the & flag at the end of the
line will cause a new "job ID" number rather than a thread ID to be
printed. Any threads, processes or screens spawned by that thread will
inherit that same job ID. The job ID can be passed to the kill command
to kill everything associated with that background job. Also, the ps
command has been enhanced to show job ID numbers.
96. $* is now supported as an alias for $argv.
Fix Level 2.0.w Changes:
97. A number of minor problems associated with supporting substitutions
inside <<-style inline i/o documents were fixed: a) If there was a syntax
error, the prompt would not be properly reset to prompt1. b) Single and
double quotes should have been treated as ordinary characters in inline
i/o. (To quote something, only the escape character can be used.)
c) Any line containing a substitution caused a blank line to be added
to the history list. d) If a substitution was at the end of a line, an
extra space was erroneously added.
98. [NT] The sleep command left a thread entry lying around in the threads list
after it had already exited. It's now properly cleaned up.
99. Filename completion with ^F did not quote special characters if there was
only a partial match. It does now.
100. Doing a "sed '#'" caused a segment fault. It now works.
Fix Level 2.0.x Changes:
101. [NT] rm didn't work on read-only directories even with -f or -x. It
does now.
102. The more -t option for setting tabstops from the command line didn't
work. It does now.
103. diff, uniq, cut, fgrep, grep and sed shared a common i/o buffering
routine that had a bug that could cause them to crash or produce
erroneous results on files with line ends other than \r\n. That's
been fixed.
Fix Level 2.0.y Changes:
104. There was a bug in the Berkeley compatibility mode introduced at 2.0.v
that would cause the shell to hang if a #!/bin/csh script that contained
any set statements was run more than once. That's been fixed.
Fix Level 2.0.z Changes:
105. Calling the abs() built-in function without an argument caused the shell
to crash. It now gives an error message as it should.
Fix Level 2.0.27 Changes:
106. The changes made at 2.0.v to provide call stack dumps caused line
numbers not to be shown in parser error messages when compiling scripts.
That's been fixed.
107. The -I, +I, -O and +O command line options have been added to the C shell
to allow insert mode to be customized.
108. [NT] mv didn't properly move read-only files across disk partitions. It'd
make a copy, then complain it didn't have proper access. It works now.
Fix Level 2.1 Changes:
109. [NT] First complete rebuild for the March beta.
110. [NT] tar now knows that NT keeps track of timezone information. The TZ
variable and the -g and -G options are no longer used.
111. [NT] The shell is dramatically faster, especially at inserting into long
command lines and compiling scripts on the DEC Alpha and MIPS R4x00.
112. The -b option has been added to the C shell to turn off Berkeley mode
even on scripts that start with #!/bin/csh.
113. Error messages from the C shell should now all be properly displaying line
numbers where appropriate.
114. A bug that potentially could have (but was never reported to have) caused
the shell's unproc and unalias commands to crash was fixed.
115. [NT] The cl.csh script in the samples directory has been updated for
the March NT beta and now knows about the hybrid compilers on the MIPS
and Alpha machines. Use -old to get the old compilers.
116. [NT] hlabel.exe can now set the label on a volume. (There was no Win32 API
to support this under the October Beta.)
117. [NT] The C shell -Z option now works. (Previously, it was ignored under
NT because there was no support for it under the October Beta Win32.)
118. [NT] The rm.exe command has been renamed hrm.exe and an "alias rm hrm"
command added to the default startup.csh script to avoid conflicts with
the brain-dead Microsoft rm.exe command supplied with the NT SDK.
119. [OS/2 2.0] Inexplicably, DOS VDM applications were being started in invisible
windows. Accessing them required typing Ctrl-Esc. They're now properly
started in visible windows.
Fix Level 2.1.a Changes:
120. [NT] Touch, mv, cp and tar now know how to set the timestamps on directories.
121. csh -XC now looks for a command immediately following the "C". It no longer
tries to parse any remaining characters in that word as option characters and
no longer requires the command to start in the next word.
Fix Level 2.1.b Changes:
122. [NT] Hlabel would only change the label on the current drive. It works
properly now.
123. The C shell didn't properly handle $i[$j] and $i[$k[^]] references in
Berkeley compatibility mode. That's been fixed.
124. Set variables weren't always inherited by child threads in Berkeley mode.
For example,
% set i = 1; echo `echo $i`
didn't work. It does now.
Fix Level 2.1.c Changes:
125. In Berkeley mode, double quoted substitutions involving $0 could fail. E.g.,
% echo "$0 a"
caused the shell to crash. It works now.
126. The Berkeley C shell would accept case clauses that didn't have colons
following the test and those with quotes around the pattern. This wasn't
the documented behavior but some users did write scripts that depended on
it so Hamilton C shell now allows that also in Berkeley mode.
127. for i = 1 to 1 by -1; echo $i; end would loop thru 1, 0, -1, -2, -3, etc.,
rather than exiting after the first iteration. That's fixed now.
Fix Level 2.1.d Changes:
128. [NT] Trying to set path[i] garbled the global variables lock. That statement
would appear to work, but, e.g., trying then to do a setenv would hang and
eventually crash. That's been fixed.
129. In Berkeley mode, other indexed variable references such as @ i[$j]++ didn't
index properly. They do now.
130. [NT] The cl.csh script in the samples directory didn't properly work with -O
options. It does now.
Known Bugs and Limitations
1. The keyboard editing logic only checks to see if the cursor's been moved
by a background process or thread when it reads the first keystroke. That
catches most situations, but if you begin typing a command and then some
background activity starts writing to the screen or moving the cursor,
the result can be a scrambled display.
2. The C shell does not yet understand the special device names like CONIN$
that NT supports. The following statement won't work in this build
but will in the next:
cat < conin$
3. To kill a Win3.x or NT GUI app, the -! option must be used, specifying
that TerminateProcess should be called. While certainly effective,
TerminateProcess does not notify any DLL's that the process is
exiting.
4. Touch'ing a directory on an OS/2 machine over Lan Manager doesn't do
anything; it works over a network to another NT machine. This appears to
be a bug in Lan Manager.
Thank you for using Hamilton C shell.
Douglas A. Hamilton
April 28, 1993
Hamilton Laboratories
13 Old Farm Road
Wayland, MA 01778-3117
USA
phone: 508-358-5715
FAX: 508-358-1113
BIX Network: hamilton
CompuServe: 70034,2025
MCI Mail: 389-0321
Telex: 6503890321
Internet: 3890321@mcimail.com